import axios from 'axios'
import { v4 as uuidv4 } from 'uuid'
import { getItem } from '@/utils/token'

// 创建示例
const requests = axios.create({
  baseURL: '/api',
  timeout: 1000
})

// 添加请求拦截器
requests.interceptors.request.use((config) => {
  // 获取时间戳 为了防止浏览器有缓存不向服务器请求数据
  const timeDate = +new Date()
  // 判断是否请求用户信息且为POST请求
  if (config.url === '/user' && config.method === 'post') {
    // 携带token值
    config.data.token = uuidv4()
  } else if (config.url === '/bill') {
    // 判断是否请求账单
    const user = getItem('TOKEN')
    // post请求携带token路径
    if (user && config.method !== 'post') {
      config.url = `${config.url}/${user.token}?${timeDate}`
    } else if (!user && config.method !== 'post') {
      // 没有用户信息，使用游客数据
      config.url = `${config.url}/bff2e060-gda?${timeDate}`
    }
  } else if (config.url === '/bill' && config.method === 'post') {
    // 请求账单数据携带时间戳
    config.url = `${config.url}?${timeDate}`
  }
  return config
}, (error) => {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
requests.interceptors.response.use((response) => {
  // 判断响应数据是否为用户信息，且为GET请求
  if (response.config.url === '/user' && response.config.method === 'get') {
    // 删除数据中的id值以及密码
    Reflect.deleteProperty(response.data[0], 'id')
    Reflect.deleteProperty(response.data[0], 'password')
    // 没有用户信息，抛出错误
    return response.data[0] ?? new Promise('error')
  } else {
    // 删除id值
    Reflect.deleteProperty(response.data, 'id')
    return response.data
  }
}, (error) => {
  // 对响应错误做点什么
  return Promise.reject(error)
})

export default requests
